#ifndef RING_BUFFER_H
#define RING_BUFFER_H

#include <pthread.h>
#include <stdint.h>
#include <stdbool.h>

#define RB_OK              0   // 操作成功
#define RB_ERROR          -1   // 参数错误
#define RB_EMPTY          -2   // 缓冲区空
#define RB_FULL           -3   // 缓冲区满

typedef struct {
    uint8_t* buffer;    // 缓冲区指针
    int32_t size;       // 缓冲区总大小
    int32_t wpos;       // 写位置
    int32_t rpos;       // 读位置
    pthread_mutex_t mutex; // 互斥锁
} ring_buffer_t;

// 初始化环形缓冲区
int ring_buffer_init(ring_buffer_t* rb, uint8_t* buffer, int32_t size);

// 反初始化环形缓冲区
void ring_buffer_deinit(ring_buffer_t* rb);

// 重置环形缓冲区
void ring_buffer_reset(ring_buffer_t* rb);

// 写入数据到环形缓冲区
int32_t ring_buffer_write(ring_buffer_t* rb, const uint8_t* data, int32_t len);

// 从环形缓冲区读取数据
int32_t ring_buffer_read(ring_buffer_t* rb, uint8_t* data, int32_t len);

// 获取已用空间大小
int32_t ring_buffer_used(ring_buffer_t* rb);

// 获取可用空间大小
int32_t ring_buffer_available(ring_buffer_t* rb);

// 检查缓冲区是否为空
int ring_buffer_is_empty(ring_buffer_t* rb);

// 检查缓冲区是否已满
int ring_buffer_is_full(ring_buffer_t* rb);

#endif // RING_BUFFER_H